// 所有模块都通过 define 来定义
define(function(require, exports, module) {
	require('jquery');
	var temp = require('fun/Template');
	var ws = require('Socket');
	var tempElementEditorId = null;
	var tempElement = null;
	var tempData = null;
	var end=new RegExp('/$');
	ws.addListener('loadPage', loadNode);
	ws.addListener('loadNode', loadNode);
	function loadNode(data){
		tempData = data;
		setPageProperty(data);
	}
	function initEvent() {
		var con = $('#editor').contents().find('body');
		tempElement= con;
		con.click(function(e) {
			var $t = $(e.target);
			if (!$t.is('body')) {
				return;
			}
			selectElement($t, con);
		});
		con.delegate("*", "keydown", function(e) {

		}).delegate("*", "click", function(e) {
			selectElement($(this), con);
		});
		var panels = $('#panels');
		panels.delegate("input", "change", change);
	}
	function change(e){
		var $el = $(e.currentTarget);
		var tempNamespace=tempData.namespace;
		var index=tempNamespace.indexOf('//');
		var space=tempNamespace.substring(index+2);
		if(!end.test(space)){
			space+="/";
		}
		seajs.use('element/'+space+tempData.tagName, function(node) {
			node.trigger(tempElement,tempData,$el);
		});
	}
	function selectElement($ele, $par) {
		var editorId = $ele.attr('editor-id');
		if (editorId == tempElementEditorId) {
			return;
		} else {
			$('.selected', $par).removeClass('selected');
			tempElementEditorId = editorId;
			if (tempElement) {
				if (tempElement.is('body')) {
					ws.send('page', 'update', tempData);
				} else {
					ws.send('node', 'update', tempData);
				}
				tempElement = $ele;

				if (tempElement.is('body')) {
					ws.send('page', 'getById', window.pageId);
					return;
				} else {
					ws.send('node', 'getById', editorId);
				}
			} else {
				ws.send('page', 'update', tempData);
				tempElement = $ele;
			}
		}
		if ($ele.is('body')) {
			return;
		}
		$($ele).addClass('selected');
		ws.send('node', 'getById', editorId);
	}

	ws.send('page', 'getById', window.pageId);
	function getQueryString(name) {
		var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
		var r = window.location.search.substr(1).match(reg);
		if (r != null)
			return unescape(r[2]);
		return null;
	}
	function setPageProperty(pro) {
		var con = $('#panels').empty();
		var id = '[id="' + pro.namespace + "#" + pro.tagName + '"]';
		if (!$(id).length) {
			temp.listNamespace(pro.namespace, function() {
				if (!$(id).length) {
					throw new Error("");
				}
				con.html(temp.render(pro));
			});
		} else {
			con.html(temp.render(pro));
		}
	}

	module.exports = {
		initEvent : initEvent
	};
});